{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to Quantitative Finance\n",
    "\n",
    "Copyright (c) 2019 Python Charmers Pty Ltd, Australia, <https://pythoncharmers.com>. All rights reserved.\n",
    "\n",
    "<img src=\"img/python_charmers_logo.png\" width=\"300\" alt=\"Python Charmers Logo\">\n",
    "\n",
    "Published under the Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license. See `LICENSE.md` for details.\n",
    "\n",
    "Sponsored by Tibra Global Services, <https://tibra.com>\n",
    "\n",
    "<img src=\"img/tibra_logo.png\" width=\"300\" alt=\"Tibra Logo\">\n",
    "\n",
    "\n",
    "## Module 2.5: Model and Estimate Instability\n",
    "\n",
    "### 2.5.1 Model and Estimate Instability\n",
    "\n",
    "Modelling is inherently a tricky affair, with lots of factors playing into the ability for the model to be *useful*. Normally, useful for prediction.\n",
    "\n",
    "If we consider the following use case:\n",
    "\n",
    "1. We develop and train a statistical model on a set of data, known as the *training data*\n",
    "2. We evaluate the model on a set of data not in the training data, which is the *test* or *evaluation* data\n",
    "3. We use the model for predicting data that was not in either the training or testing set - new data from the real world.\n",
    "\n",
    "A key assumption behind this process being viable is that the process for generating the data stays the same, across the train, test and real world. If those parameters change, then our model is not useful for prediction, regardless of how well it fits the training data.\n",
    "\n",
    "A recent event that has caused controversy is when face recognition systems fail to detect people of colour. Joy Buolamwini is a computer scientist and activist working to ensure facial recognition systems work beyond their training data of \"predominately white males\". You can learn more about her work here: https://www.ajlunited.org/the-coded-gaze\n",
    "\n",
    "<a href=\"https://www.youtube.com/watch?v=162VzSzzoPs\"><img src=\"img/facial_recognition.png\"></a>\n",
    "\n",
    "Without such bias (intended or accidental), it would be rare (perhaps unlucky) for the parameters to change as soon as we switch from evaluation to real world use. For example, your trained quant model may be deployed immediately before a new regulation changes market dynamics dramatically.\n",
    "\n",
    "More likely is that the parameters are constantly changing, with respect to our model. This happens if the model itself underfits the data. That is, the model doesn't adequately understand the process for generating the data.\n",
    "\n",
    "One way to evaluate whether your model is adequately fitting is to check that the parameters are stable when the data changes. One way of performing this would be to split your training data up, train on each split, and then examine the parameters for each:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%run setup.ipy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.linspace(-20, 20, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = x ** 2 - 2 * x + 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f8d89a2310>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, if we fit a linear regression model, the result will be flat:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -2.        , 141.02693603])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Using NumPy. You can use statsmodels as well\n",
    "params = np.polyfit(x, y, 1)\n",
    "params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = np.poly1d(params)(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1f8db48f450>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, y, 'r-')  # Actual data in red\n",
    "plt.plot(x, y_pred, 'b--')  # Predicted data in blue"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While this is a contrived and easy to spot example, this type of underfitting can be much harder to see, but still present, in many real world applications.\n",
    "\n",
    "If we suspect we aren't fitting the model correctly (for instance, check the residual plot as we saw in the previous modules), we can fit the model to a subset of the data and compare the models:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get all the negative values for x\n",
    "x_low = x[x < 0]\n",
    "y_low = y[x < 0]\n",
    "# Get all the positive values for x\n",
    "x_high = x[x >= 0]\n",
    "y_high = y[x >= 0]\n",
    "\n",
    "\n",
    "# Fit model to each\n",
    "params_low = np.polyfit(x_low, y_low, 1)\n",
    "params_high = np.polyfit(x_high, y_high, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "See how the parameters are drastically different for these two subsets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-22.2020202 , -63.03387409])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params_low"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 18.2020202 , -63.03387409])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params_high"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(Side note: the same y-intercept is simply because our model is symmetrical about the y-axis. If you are unsure about this, see the next figure.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, y, 'r-')  # Actual data in red\n",
    "\n",
    "y_pred_low = np.poly1d(params_low)(x)\n",
    "plt.plot(x, y_pred_low, 'g--')  # Predictions from \"low\" model in green\n",
    "\n",
    "y_pred_high = np.poly1d(params_high)(x)\n",
    "plt.plot(x, y_pred_high, 'k--')  # Predictions from \"high\" model in black\n",
    "\n",
    "plt.title(\"Wildly different!\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each of these models is a reasonable linear estimator of the area it was asked to fit, however both fail drastically when dealing with the out-of-sample data. If you were to evaluate one line by using the data from the other line, you will get errors that are wildly different from the training data.\n",
    "\n",
    "There are a few methods to help us here. In our example above, we did a split at $x=0$, but it may not always be obvious if or where such a threshold would sit.\n",
    "\n",
    "### Cross Fold Validation\n",
    "\n",
    "A key algorithm for evaluation in statistics, machine learning and artificial intelligence is cross-fold validation (often just \"CV\"). We looked at this process quickly in an exercise in Module 2.3.1.\n",
    "\n",
    "This technique splits the dataset into separate subsets, called \"folds\". Each fold is normally the same size. Where we have $k$ different folds, we refer to the process as $k$-fold cross validation. Normal $k$ values are 3 or 10, but these are just rules of thumb.\n",
    "\n",
    "Given $k$ folds, we do the following loop $k$ times, and each time we use one fold for testing/evaluation, and the rest of the folds for training the data.\n",
    "\n",
    "After repeating that loop, we average the evaluation result (i.e. SSE or accuracy) to present the final version. It would also be possible to report confidence bounds on the process and variance. If your evaluation results have a high amount of variance, it is possible your model is insufficiently modelling the data. It could be underfitting and not capturing enough information. It could be overfitting, and capturing too much information. Other methods of analysis can help with fixing the problem once identified.\n",
    "\n",
    "One type of $k$-fold cross validation is setting $k=n$, where $n$ is the number of samples in your dataset. This is known as \"hold one out cross validation\". In this version, all-but-one data is used for training, and one sample is used for testing. This is very time consuming and normally not better than smaller numbers of folds. In some cases it can be worse, as there is a large variation in the evaluation results.\n",
    "\n",
    "Folds in CV are normally randomly split up from the original data. This is effective, and recommended, for non-time series data, but is not a good idea for time series analysis, especially if you suspect lagged correlation at all. Any time where the position of the data in the dataset may affect its value is problematic.\n",
    "\n",
    "A technique for cross fold validation in time series is the \"evaluation on a rolling forecasting origin\". In this, we iterate $n$ times ($n$ is the number of data points), and at each iteration $i$ we choose the first $i$ points as the training data, and evaluate on the $(i+m)$th point, where $m$ is usually just 1 - so \"the next point\". We then evaluate the model over all these iterations. You may be more interested in the prediction one week after the end of the training set and, as an example, set $m=7$ for daily data.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise\n",
    "\n",
    "1. Compute the training and testing SSE for the parabola example above. Use the lower range as your training data, and the upper range as the testing data. Note the wildly different SSE values between the two sets.\n",
    "2. Test again using a polyfit with degree 2. How does the SSE different change?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From solutions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "11149281.771428553"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#1\n",
    "train_err = y_pred_low[0:50] - y_low\n",
    "train_SSE = np.sum(train_err **2)\n",
    "train_SSE\n",
    "\n",
    "test_err = y_pred_low[50:100] - y_high\n",
    "test_SSE = np.sum(test_err **2)\n",
    "test_SSE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.721046160338954e-25"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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du7cuey/Z4A1ceJE6+eff7aOHTtmWZZljR071goNDbW++OILa+fOnVaHDh2sSpUqWZcuXTJcfmX+7fjOnTtnPfPMM1Z0dLR15MgR69tvv7Xq1atnValSxUpNTTWdfkX69etnhYSEWOvWrcvxPe/ixYvZj3niiSes8uXLW9999521bds2KzIy0oqMjCyQPg2U/5kzZ44FXPb2Z7/88ot12223Wb6+vlaZMmWssWPHGirOvd69e1/2+NauXWtZlmWtXLnSqlu3rhUYGGgVKVLEqlOnjjVz5kzLbrebDb9C/3V8lmVZR48etdq0aWP5+/tbxYsXt4YMGWJlZGSYi74G27dvtxo1amSFhIRYfn5+1o033mi9/vrrLvMvx38ybdo0q3z58paPj4/VsGFDa9OmTaaT8kS3bt2sUqVKWT4+PlaZMmWsbt26WQcPHjSddU3Wrl172b9zvXv3tiwr66XGw4cPt8LDwy1fX1+refPm1r59+8xG58K/Hd/Fixetli1bWiVKlLC8vb2tChUqWH379nWpMf1P3/PmzJmT/ZhLly5ZTz75pFW0aFErICDA6tSpU47/456fPP4XKSIiIuI03P5VPCIiIuJ6NFBERETE6WigiIiIiNPRQBERERGno4EiIiIiTkcDRURERJyOBoqIiIg4HQ0UERERcToaKCIiIuJ0NFBERETE6WigiIiIiNPRQBERERGn838JzK+tj10n3gAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#2\n",
    "\n",
    "# Fit model to each\n",
    "params_low = np.polyfit(x_low, y_low, 2)\n",
    "params_high = np.polyfit(x_high, y_high, 2)\n",
    "\n",
    "plt.plot(x, y, 'r-')  # Actual data in red\n",
    "\n",
    "y_pred_low = np.poly1d(params_low)(x)\n",
    "plt.plot(x, y_pred_low, 'g--')  # Predictions from \"low\" model in green\n",
    "\n",
    "y_pred_high = np.poly1d(params_high)(x)\n",
    "plt.plot(x, y_pred_high, 'k--')  # Predictions from \"high\" model in black\n",
    "\n",
    "# Rerun our SSE calculations\n",
    "\n",
    "train_err = y_pred_low[0:50] - y_low\n",
    "train_SSE = np.sum(train_err **2)\n",
    "train_SSE\n",
    "\n",
    "test_err = y_pred_low[50:100] - y_high\n",
    "test_SSE = np.sum(test_err **2)\n",
    "test_SSE\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*For solutions, see `solutions/polyfit.py`*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Extended Exercise\n",
    "\n",
    "Write a function implementing $m$-step, evaluation on a rolling forecasting origin, cross validation for time series analysis. The input would be your data frame (with a time series index) and the output would be a list of all the folds for the technique. Your function should have the following signature:\n",
    "\n",
    "```python\n",
    "\n",
    "def rolling_forecasting_origin(time_series, m=1):\n",
    "    \"\"\"Performs a rolling forecasting origin with steps of m\n",
    "    \n",
    "    parameters:\n",
    "        time_series: pandas data frame with a time series index\n",
    "        m: positive non-zero integer. 1 by default \n",
    "       \n",
    "    returns:\n",
    "        folds: a list of each of the training and testing folds for pandas.\n",
    "    \"\"\"\n",
    "```\n",
    "\n",
    "If you are very confident with python, have this function be a generator that `yields` the different training and testing sets.\n",
    "\n",
    "If you need an alternate description of the technique, see the diagrams and information at https://robjhyndman.com/hyndsight/tscv/ who implemented this technique in R.\n",
    "\n",
    "As with all large exercises, focus on solving the problem in three distinct steps:\n",
    "\n",
    "1. Get it working. Just get the function call scoped out and the technique doing what it should. Your code becomes useful in this step.\n",
    "2. Get it right. Consider edge cases (like a time series with no data points) and how they are handled. Your code becomes robust in this step, usually with the addition of testing code.\n",
    "3. Make it fast. Only after completing the above steps do you optimise your code to try make it fast.\n",
    "\n",
    "Note for this exercise, that the process may take a long time to run, especially for large datasets."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*For solutions, see `solutions/rolling_forecast.py`*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Checking variance of parameters\n",
    "\n",
    "Once you have your results of fitting many models with cross-fold validation, you can analyse the fitted parameters. First, check for variance. Second, use those parameters to find your finished model.\n",
    "\n",
    "In checking for variance, simply check the spread of the values. High values, particularly if some are negative and some are positive, may be indicative of instability in the model. For this to work, though, you must have independent variables in your dataset. If two variables are highly correlated, you may get cases where the shared weight between the two is consistent, but \"flipping\" from one variable to the other as they both fill the same role in the estimator. \n",
    "\n",
    "If the variance is fine, you can then use the parameters to fit your final model - the one that will be used in practice. There are two approaches to doing this:\n",
    "\n",
    "1. If you are happy with the results, simply fit *the same type* of model on your own dataset, ignoring the features learned during training. Effectively, your training told you \"this model type can learn this data in a stable way\", so you just train the model using as much of the data as you can.\n",
    "2. If you are using the OLS or another Linear model (for instance Logistic Regression or Ridge Regression), the final parameters could just be the average of the parameters from each of the fitted models. This is mathematically sound for some model types, and is what the `scikit-learn` package does, for instance in [LogisticRegressionCV](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV)\n",
    "\n",
    "\n",
    "### Sample Instability\n",
    "\n",
    "Another approach for checking the stability of the model is to bootstrap sample the training data, fit your model, and compare the variance of parameters over many of these samples. The approach should look familiar to you after previous modules:\n",
    "\n",
    "1. Sample your data to create a sample-with-replacement with the same size as your original training data\n",
    "2. Fit your model and note the parameters\n",
    "3. Repeat steps 1 and 2 many times (if you have the time, do thousands)\n",
    "4. Compute the mean, variance and confidence intervals of the parameters from the many samples\n",
    "\n",
    "If your variance is too high, the model is not stable with respect to your data.\n",
    "\n",
    "If you do get instability here, the likely cause is that your model is underfitting or overfitting the data. This causes the model to adhere to specific characteristics of the model, rather than finding underlying trends in the data. If you are using a simple model, like a basic linear regression, try a more complicated version. If you are using a complicated model, like a neural network, try restricting it or using a simpler model and compare the results."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Control Charts\n",
    "\n",
    "Another approach to look for changes in variability in a model (which leads to unstable estimations) is the control chart. A control chart is a simple plot of the data of a single variable over time, but with three extra lines - the mean of the data, the upper control limit (UCL) and the lower control limit (LCL). Normally, the UCL and LCL are three standard deviations from the mean.\n",
    "\n",
    "This idea of a control chart comes from the six sigma process control methodology.\n",
    "\n",
    "<div class=\"alert alert-danger\">\n",
    "    Note that setting the UCL and LCL to three standard deviations is not statistically sound. Normal distributions refer to means of samples, not to individual sample measurements themselves.\n",
    "</div>\n",
    "\n",
    "Let's see a control chart for the AUD/USD exchange rate:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "LimitExceededError",
     "evalue": "(Status 429) (Quandl Error QELx01) You have exceeded the anonymous user limit of 50 calls per day. To make more calls today, please register for a free Nasdaq Data Link account and then include your API key with your requests.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mLimitExceededError\u001b[0m                        Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[14], line 3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mquandl\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m audusd \u001b[38;5;241m=\u001b[39m \u001b[43mquandl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mRBA/FXRUSD\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\quandl\\get.py:48\u001b[0m, in \u001b[0;36mget\u001b[1;34m(dataset, **kwargs)\u001b[0m\n\u001b[0;32m     46\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m dataset_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcolumn_index\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m     47\u001b[0m         kwargs\u001b[38;5;241m.\u001b[39mupdate({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcolumn_index\u001b[39m\u001b[38;5;124m'\u001b[39m: dataset_args[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcolumn_index\u001b[39m\u001b[38;5;124m'\u001b[39m]})\n\u001b[1;32m---> 48\u001b[0m     data \u001b[38;5;241m=\u001b[39m \u001b[43mDataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdataset_args\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mcode\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhandle_column_not_found\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[0;32m     49\u001b[0m \u001b[38;5;66;03m# Array\u001b[39;00m\n\u001b[0;32m     50\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(dataset, \u001b[38;5;28mlist\u001b[39m):\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\quandl\\model\\dataset.py:47\u001b[0m, in \u001b[0;36mDataset.data\u001b[1;34m(self, **options)\u001b[0m\n\u001b[0;32m     45\u001b[0m updated_options \u001b[38;5;241m=\u001b[39m Util\u001b[38;5;241m.\u001b[39mmerge_options(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m, params, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions)\n\u001b[0;32m     46\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 47\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mData\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mall\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mupdated_options\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     48\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m NotFoundError:\n\u001b[0;32m     49\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m handle_not_found_error:\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\quandl\\operations\\list.py:15\u001b[0m, in \u001b[0;36mListOperation.all\u001b[1;34m(cls, **options)\u001b[0m\n\u001b[0;32m     13\u001b[0m     options[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m     14\u001b[0m path \u001b[38;5;241m=\u001b[39m Util\u001b[38;5;241m.\u001b[39mconstructed_path(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39mlist_path(), options[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m---> 15\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43mConnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mget\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     16\u001b[0m response_data \u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mjson()\n\u001b[0;32m     17\u001b[0m Util\u001b[38;5;241m.\u001b[39mconvert_to_dates(response_data)\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\quandl\\connection.py:38\u001b[0m, in \u001b[0;36mConnection.request\u001b[1;34m(cls, http_verb, url, **options)\u001b[0m\n\u001b[0;32m     34\u001b[0m options[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m headers\n\u001b[0;32m     36\u001b[0m abs_url \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (ApiConfig\u001b[38;5;241m.\u001b[39mapi_base, url)\n\u001b[1;32m---> 38\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhttp_verb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mabs_url\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\quandl\\connection.py:50\u001b[0m, in \u001b[0;36mConnection.execute_request\u001b[1;34m(cls, http_verb, url, **options)\u001b[0m\n\u001b[0;32m     45\u001b[0m response \u001b[38;5;241m=\u001b[39m session\u001b[38;5;241m.\u001b[39mrequest(method\u001b[38;5;241m=\u001b[39mhttp_verb,\n\u001b[0;32m     46\u001b[0m                            url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m     47\u001b[0m                            verify\u001b[38;5;241m=\u001b[39mApiConfig\u001b[38;5;241m.\u001b[39mverify_ssl,\n\u001b[0;32m     48\u001b[0m                            \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions)\n\u001b[0;32m     49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m response\u001b[38;5;241m.\u001b[39mstatus_code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m200\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m response\u001b[38;5;241m.\u001b[39mstatus_code \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m300\u001b[39m:\n\u001b[1;32m---> 50\u001b[0m     \u001b[38;5;28;43mcls\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_api_error\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     51\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m     52\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m response\n",
      "File \u001b[1;32mc:\\Python311\\Lib\\site-packages\\quandl\\connection.py:114\u001b[0m, in \u001b[0;36mConnection.handle_api_error\u001b[1;34m(cls, resp)\u001b[0m\n\u001b[0;32m    103\u001b[0m d_klass \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m    104\u001b[0m     \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m: LimitExceededError,\n\u001b[0;32m    105\u001b[0m     \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mM\u001b[39m\u001b[38;5;124m'\u001b[39m: InternalServerError,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    110\u001b[0m     \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mX\u001b[39m\u001b[38;5;124m'\u001b[39m: ServiceUnavailableError\n\u001b[0;32m    111\u001b[0m }\n\u001b[0;32m    112\u001b[0m klass \u001b[38;5;241m=\u001b[39m d_klass\u001b[38;5;241m.\u001b[39mget(code_letter, QuandlError)\n\u001b[1;32m--> 114\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m klass(message, resp\u001b[38;5;241m.\u001b[39mstatus_code, resp\u001b[38;5;241m.\u001b[39mtext, resp\u001b[38;5;241m.\u001b[39mheaders, code)\n",
      "\u001b[1;31mLimitExceededError\u001b[0m: (Status 429) (Quandl Error QELx01) You have exceeded the anonymous user limit of 50 calls per day. To make more calls today, please register for a free Nasdaq Data Link account and then include your API key with your requests."
     ]
    }
   ],
   "source": [
    "import quandl\n",
    "\n",
    "audusd = quandl.get(\"RBA/FXRUSD\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "changes = audusd.pct_change()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "Cannot interpret '<attribute 'dtype' of 'numpy.generic' objects>' as a data type",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-17-949e6d6c682c>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mchanges\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdescribe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36mdescribe\u001b[1;34m(self, percentiles, include, exclude)\u001b[0m\n\u001b[0;32m  10263\u001b[0m         \u001b[1;32melif\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mexclude\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m  10264\u001b[0m             \u001b[1;31m# when some numerics are found, keep only numerics\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m> 10265\u001b[1;33m             \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mselect_dtypes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnumber\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m  10266\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m  10267\u001b[0m                 \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36mselect_dtypes\u001b[1;34m(self, include, exclude)\u001b[0m\n\u001b[0;32m   3425\u001b[0m         \u001b[1;31m# the \"union\" of the logic of case 1 and case 2:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3426\u001b[0m         \u001b[1;31m# we get the included and excluded, and return their logical and\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3427\u001b[1;33m         \u001b[0minclude_these\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSeries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mnot\u001b[0m \u001b[0mbool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   3428\u001b[0m         \u001b[0mexclude_these\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSeries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mnot\u001b[0m \u001b[0mbool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexclude\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3429\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\series.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, data, index, dtype, name, copy, fastpath)\u001b[0m\n\u001b[0;32m    309\u001b[0m                     \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    310\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 311\u001b[1;33m                 \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msanitize_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mraise_cast_failure\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    312\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    313\u001b[0m                 \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSingleBlockManager\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals\\construction.py\u001b[0m in \u001b[0;36msanitize_array\u001b[1;34m(data, index, dtype, copy, raise_cast_failure)\u001b[0m\n\u001b[0;32m    710\u001b[0m                 \u001b[0mvalue\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmaybe_cast_to_datetime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    711\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 712\u001b[1;33m             \u001b[0msubarr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconstruct_1d_arraylike_from_scalar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    713\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    714\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\dtypes\\cast.py\u001b[0m in \u001b[0;36mconstruct_1d_arraylike_from_scalar\u001b[1;34m(value, length, dtype)\u001b[0m\n\u001b[0;32m   1231\u001b[0m                 \u001b[0mvalue\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mensure_str\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1232\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1233\u001b[1;33m         \u001b[0msubarr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mempty\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlength\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1234\u001b[0m         \u001b[0msubarr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfill\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1235\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: Cannot interpret '<attribute 'dtype' of 'numpy.generic' objects>' as a data type"
     ]
    }
   ],
   "source": [
    "changes.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "ucl = changes.mean() + 3 * changes.std()\n",
    "lcl = changes.mean() - 3 * changes.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "Cannot interpret '<attribute 'dtype' of 'numpy.generic' objects>' as a data type",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-19-95d395e442de>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m12\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m12\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mchanges\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      3\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhlines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mucl\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlcl\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxmin\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mchanges\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxmax\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mchanges\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\plotting\\_core.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m    792\u001b[0m                     \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlabel_name\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    793\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 794\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mplot_backend\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    795\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    796\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mline\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\__init__.py\u001b[0m in \u001b[0;36mplot\u001b[1;34m(data, kind, **kwargs)\u001b[0m\n\u001b[0;32m     60\u001b[0m             \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"ax\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"left_ax\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     61\u001b[0m     \u001b[0mplot_obj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPLOT_CLASSES\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkind\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 62\u001b[1;33m     \u001b[0mplot_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     63\u001b[0m     \u001b[0mplot_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     64\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mplot_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py\u001b[0m in \u001b[0;36mgenerate\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    277\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mgenerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    278\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_args_adjust\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 279\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_compute_plot_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    280\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setup_subplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    281\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_make_plot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py\u001b[0m in \u001b[0;36m_compute_plot_data\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    402\u001b[0m         \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_convert\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdatetime\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtimedelta\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    403\u001b[0m         numeric_data = data.select_dtypes(\n\u001b[1;32m--> 404\u001b[1;33m             \u001b[0minclude\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnumber\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"datetime\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"datetimetz\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"timedelta\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    405\u001b[0m         )\n\u001b[0;32m    406\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36mselect_dtypes\u001b[1;34m(self, include, exclude)\u001b[0m\n\u001b[0;32m   3425\u001b[0m         \u001b[1;31m# the \"union\" of the logic of case 1 and case 2:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3426\u001b[0m         \u001b[1;31m# we get the included and excluded, and return their logical and\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3427\u001b[1;33m         \u001b[0minclude_these\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSeries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mnot\u001b[0m \u001b[0mbool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   3428\u001b[0m         \u001b[0mexclude_these\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSeries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mnot\u001b[0m \u001b[0mbool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexclude\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3429\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\series.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, data, index, dtype, name, copy, fastpath)\u001b[0m\n\u001b[0;32m    309\u001b[0m                     \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    310\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 311\u001b[1;33m                 \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msanitize_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mraise_cast_failure\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    312\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    313\u001b[0m                 \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSingleBlockManager\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals\\construction.py\u001b[0m in \u001b[0;36msanitize_array\u001b[1;34m(data, index, dtype, copy, raise_cast_failure)\u001b[0m\n\u001b[0;32m    710\u001b[0m                 \u001b[0mvalue\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmaybe_cast_to_datetime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    711\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 712\u001b[1;33m             \u001b[0msubarr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconstruct_1d_arraylike_from_scalar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    713\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    714\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\dtypes\\cast.py\u001b[0m in \u001b[0;36mconstruct_1d_arraylike_from_scalar\u001b[1;34m(value, length, dtype)\u001b[0m\n\u001b[0;32m   1231\u001b[0m                 \u001b[0mvalue\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mensure_str\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1232\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1233\u001b[1;33m         \u001b[0msubarr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mempty\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlength\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1234\u001b[0m         \u001b[0msubarr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfill\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1235\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: Cannot interpret '<attribute 'dtype' of 'numpy.generic' objects>' as a data type"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax, = plt.subplots(figsize=(12, 12))\n",
    "changes.plot(ax=ax)\n",
    "ax.hlines([ucl, lcl], xmin=changes.index.min(), xmax=changes.index.max())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we can see large changes in quite a few times of financial instability, particularly (and perhaps unsurprisingly) around 2008. However note that the limits are defined by the data - there would *always* be values outside these limits (for a reasonably large dataset), because the limits are defined by the standard deviation, and there should be 99.7% of points inside three standard deviations (if the data was normally distributed, which we haven't tested here).\n",
    "\n",
    "That said, control limits like these are good for automation. Some common rules of thumb for limits are to alert that a \"change from normal\" may be present if any of these are true:\n",
    "\n",
    "* A single point is outside the control limit lines\n",
    "* 2 out of 3 consecutive points are outside the control limit lines (a bit more robust to noise)\n",
    "* 10 points in a row are above (or below) the mean line\n",
    "* 5 points in a row are outside two standard deviations.\n",
    "\n",
    "It may be possible to setup automated alerts along these lines. For instance, if you have an automated trading bot, and a control limit is breached, this is indicative that the data is not following the model that you trained on. It may be a good idea to halt trading and investigate what is happening.\n",
    "\n",
    "In addition to charting the raw values (or percentage changes in this case) you could also chart residuals from your linear model, i.e. the difference between the predicted and actual values."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise\n",
    "\n",
    "If you have a subscription to the SGE data set in Quandl, create a control chart on Australian house prices using this dataset: https://www.quandl.com/data/SGE/AUSHOUS-Australia-House-Price-Index\n",
    "\n",
    "If you do not, choose another commodity from Quandl. You can search Free dataset as an option in the Quandl search: https://www.quandl.com/search - the option for \"Free\" is on the left hand set of filters."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*For solutions, see `solutions/control_chart.py`*"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
